package com.xinchao.service.impl;

import com.google.common.collect.Maps;
import com.xinchao.constant.FileConstant;
import com.xinchao.exception.ServiceException;
import com.xinchao.service.FileService;
import com.xinchao.util.FileUtils;
import com.xinchao.util.HuaWeiCloudUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.Map;

/**
 * @author dxy
 * @date 2018/9/28 17:17
 */
@Service(value = "fileService")
public class FileServiceImpl implements FileService {

	/**
	 * 上传文件(因为获取文件的通用属性，如果要获取时长，请另行获取)
	 *
	 * @param files        MultipartFile
	 * @param cloudFileDir 云文件目录
	 * @return Map<String, Object>
	 * @throws ServiceException
	 * @throws IOException
	 */
	@Override
	public Map<String, Object> uploadFile(MultipartFile files, String cloudFileDir) throws IOException, ServiceException {
		if (files == null || StringUtils.isBlank(cloudFileDir)) {
			throw new ServiceException("输入参数不能未空");
		}
		//获取文件名称
		String originalFilename = files.getOriginalFilename();
		//文件后缀
		String fileExtension = FilenameUtils.getExtension(originalFilename);
		//去掉扩展名的文件名
		String fileName = originalFilename.replaceAll("." + fileExtension, "");
		//将MultipartFile转化为指定文件名的File
		java.io.File file = FileUtils.multipartFileConvertFile(files, fileName + "." + fileExtension);
		//将文件上传至华为云
		String url = HuaWeiCloudUtils.uploadFile2HuaweiCloud(file, cloudFileDir);
		//获取文件md5值
		String md5 = FileUtils.getFileMD5(file);
		//获取时长
		//把MultipartFile转化为File,会在本地创建文件，用完file后，需要删除
		if (file.exists()) {
			file.delete();
		}
		//返回给前端使用
		Map<String, Object> fileMap = Maps.newHashMap();
		fileMap.put(FileConstant.URL, url);
		fileMap.put(FileConstant.FILE, url);
		fileMap.put(FileConstant.MD5, md5);
		fileMap.put(FileConstant.NAME, originalFilename);
		return fileMap;
	}
}
